package com.javaex.book.pojo;

import java.math.BigDecimal;
import java.util.LinkedHashMap;
import java.util.Map;

import com.javaex.book.utils.LoggerUtils;

/**
 * 购物车
 *
 * @author 黄星琦
 * @Date 2022年2月27日
 */
public class Cart {
	
	/** 商品列表 */
	private Map<Integer, CartItem> items = new LinkedHashMap<>();
	
	/**
	 * 添加商品
	 * @param cartItem 要添加的商品
	 */
	public void add(CartItem cartItem) {
		// 查看购物城中是否已存在此商品
		CartItem item = items.get(cartItem.getId());
		// 如果不存在，则直接加入购物车
		if (item == null) {
			items.put(cartItem.getId(), cartItem);
			return;
		}
		// 如果已存在，则数量累加
		item.setCount(item.getCount() + cartItem.getCount());
	}
	
	/**
	 * 删除商品
	 * @param id 商品id
	 */
	public void delete(Integer id) {
		items.remove(id);
	}
	
	/**
	 * 清空购物车
	 */
	public void clear() {
		items.clear();
	}
	
	/**
	 * 修改商品数量
	 * @param id 商品id
	 * @param count 商品数量
	 */
	public void update(Integer id, Integer count) {
		// 查看购物车中是否存在此商品。如果存在，更新总数量
		CartItem item = items.get(id);
		if (item == null) {
			return;
		}
		item.setCount(count);
	}

	/**
	 * 获取商品总数量
	 * @return 商品总数
	 */
	public Integer getTotalCount() {
		Integer totalCount = 0;
		for (CartItem item : items.values()) {
			totalCount += item.getCount();
		}
		return totalCount;
	}

	/**
	 * 获取商品金额
	 * @return 商品总金额
	 */
	public BigDecimal getTotalPrice() {
		BigDecimal totalPrice = new BigDecimal(0);
		for (CartItem item : items.values()) {
			totalPrice = totalPrice.add(item.getPrice());
		}
		return totalPrice;
	}

	public Map<Integer, CartItem> getItems() {
		return items;
	}

	@Override
	public String toString() {
		return "Cart [totalCount=" + getTotalCount() + ", totalPrice=" + getTotalPrice() + ", items=" + LoggerUtils.mapToString(items) + "]";
	}
}
